/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package be.hogent.iii.project.server.netwerk;

import java.nio.channels.SocketChannel;
import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author Dieter Van der Stock
 */
public class Pool {
    private ArrayList<Client> clients;
    private String naam;
    
    public Pool(String naam) {
        this.naam = naam;
        this.clients = new ArrayList();
    }
    
    public boolean bevatClient(String nickname) {
        Iterator it = clients.iterator();
        while (it.hasNext()) {
            Client c = (Client) it.next();
            //als we em tegenkomen, return true
            if (c.getNickname().equals(nickname)) {
                return true;
            }
        }
        return false;
    }
    
    public void voegClientToe(Client client) {
        System.out.println("Naam client toe te voegen: " + client.getNickname());
        clients.add(client);
    }
    
    public void verwijderClient(String nickname) {
        Iterator it = clients.iterator();
        while(it.hasNext()) {
            Client c = (Client)it.next();
            //als we de juiste tegenkomen, verwijderen we hem
            if(c.getNickname().equals(nickname)) {
                it.remove();
            }
        }
    }
    
    public void veranderNickname(String vorige, String nieuwe) {
        //we lopen alle clients af
        SocketChannel kanaal = null;
        Iterator it = clients.iterator();
        while(it.hasNext()) {
            Client c = (Client)it.next();
            //als we de juiste tegenkomen, verwijderen we hem en voegen we hem toe met de nieuwe nickname
            if(c.getNickname().equals(vorige)) {
                kanaal = c.getSocket();
                it.remove();
            }
        }
        //als er iets is gevonden, mogen we er ne nieuwe toevoegen
        //dieen add mogen we niet in de iterator doen, dan krijgen we concurrent modification exception
        if(kanaal != null) {
            clients.add(new Client(nieuwe, kanaal));
        }
    }
    
    public void verwijderClient(Client c) {
        clients.remove(c);
    }
    
    public ArrayList getClients() {
        return clients;
    }
    
    public String getNaam() {
        return naam;
    }
    
    /**
     * Geeft een lijst terug van alle socketkanalen in deze pool
     * @return Een lijst met socketkanalen
     */
    public ArrayList getSockets() {
        ArrayList sockets = new ArrayList();
        Iterator it = clients.iterator();
        while(it.hasNext()) {
            Client c = (Client)it.next();
            sockets.add(c.getSocket());
        }
        
        return sockets;
    }
    
    /**
     * Geeft een lijst terug van alle nicknames in deze pool
     * @return Een lijst met nicknames
     */
    public ArrayList getNicknames() {
        ArrayList nicknames = new ArrayList();
        Iterator it = clients.iterator();
        while(it.hasNext()) {
            Client c = (Client)it.next();
            nicknames.add(c.getNickname());
        }
        return nicknames;
    }
}
